package com.yy.smartBI.utils;

import cn.hutool.core.lang.Console;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.yy.smartBI.model.dto.airequest.AIRequest;
import com.yy.smartBI.model.dto.airequest.Content;
import com.yy.smartBI.model.dto.airequest.Message;
import com.yy.smartBI.model.dto.airequest.Value;
import com.yy.smartBI.model.dto.airesult.AIResult;

import javax.websocket.*;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * AI工具类
 * api文档
 * https://agents.baidu.com/docs/develop/out-deployment/API_calls/
 * @author yy
 */
public class AIUtils {
    // 智能体APP ID
    //https://agents.baidu.com/agent/list/codeless
    private static final String APP_ID = "6bQNJ43nxmGqh5byb7hJTzAUmMHq0yRK";
    private static final String APP_Secrect = "M6naaxASYg8sLNqrf5sOGPuYIiyNVLIT";
    //todo 定时任务 Api token  需要定时获取   有效期为30天
    private static final String API_TOKEN = "24.20ed879933a95980f2104432fdaba4eb.2592000.1748845469.282335-118734239";
    // 百度大模型
    private static final String API_URL = "https://agentapi.baidu.com/assistant/getAnswer?appId="
            +APP_ID+"&secretKey="+
            APP_Secrect;



    public static String getAnswer(String question){
        if(StrUtil.isBlank(question)){
           return "请输入问题";
        }
        // 构建请求参数
        AIRequest aiRequest = getAIRequest(question);
        //讲AIRequest对象转成json
        String json = JSONUtil.toJsonStr(aiRequest);
        //todo 链式构建请求
        String result = HttpRequest.post(API_URL)
                .header(Header.CONTENT_TYPE, "application/json")//头信息，多个头信息多次调用此方法即可
                .body(json)
                .execute().body();
        //解析返回结果
        if(StrUtil.isBlank(result)){
            return "AI 回答失败";
        }
        //解析返回结果
        try{
            AIResult aiResult = JSONUtil.toBean(result, AIResult.class);
            //判断是否成功
            if(aiResult.getStatus()!=0){
                //todo 全局处理
                return "回答失败";
            }
            return aiResult.getData().getContent().get(0).getData();
        }catch (Exception e){
            return "AI 回答失败";
        }
    }


     static AIRequest getAIRequest(String question){
        // 构建请求参数
        Value value = new Value();
        value.setShowText(question);

        Content content = new Content();
        content.setValue(value);

        Message message = new Message();
        message.setContent(content);

        AIRequest aiRequest = new AIRequest();
        //todo 这里填申请的智能体的人的openId  唯一标识
        aiRequest.setOpenId("sheep");
        aiRequest.setSource(APP_ID);
        aiRequest.setMessage(message);

        return aiRequest;
    }

    public static void main(String[] args) {
        String answer = getAnswer("柱状图+\\n[\\n  {\\n    \\\"表头1\\\": \\\"员工编号\\\",\\n    \\\"标题2\\\": \\\"姓名\\\",\\n    \\\"标题3\\\": \\\"部门\\\",\\n    \\\"标题4\\\": \\\"入职日期\\\",\\n    \\\"标题5\\\": \\\"薪资\\\",\\n    \\\"标题6\\\": \\\"项目经验\\\",\\n    \\\"标题7\\\": \\\"技能证书\\\",\\n    \\\"标题8\\\": \\\"绩效评分\\\"\\n  },\\n  {\\n    \\\"表头1\\\": \\\"001\\\",\\n    \\\"标题2\\\": \\\"张三\\\",\\n    \\\"标题3\\\": \\\"技术部\\\",\\n    \\\"标题4\\\": \\\"2020-05-15\\\",\\n    \\\"标题5\\\": \\\"12000\\\",\\n    \\\"标题6\\\": \\\"项目A、项目B\\\",\\n    \\\"标题7\\\": \\\"Java证书、PMP证书\\\",\\n    \\\"标题8\\\": \\\"90\\\"\\n  },\\n  {\\n    \\\"表头1\\\": \\\"002\\\",\\n    \\\"标题2\\\": \\\"李四\\\",\\n    \\\"标题3\\\": \\\"市场部\\\",\\n    \\\"标题4\\\": \\\"2019-07-20\\\",\\n    \\\"标题5\\\": \\\"15000\\\",\\n    \\\"标题6\\\": \\\"项目C、项目D\\\",\\n    \\\"标题7\\\": \\\"营销资格证\\\",\\n    \\\"标题8\\\": \\\"85\\\"\\n  },\\n  {\\n    \\\"表头1\\\": \\\"003\\\",\\n    \\\"标题2\\\": \\\"王五\\\",\\n    \\\"标题3\\\": \\\"财务部\\\",\\n    \\\"标题4\\\": \\\"2021-03-10\\\",\\n    \\\"标题5\\\": \\\"13000\\\",\\n    \\\"标题6\\\": \\\"项目E\\\",\\n    \\\"标题7\\\": \\\"会计从业资格证\\\",\\n    \\\"标题8\\\": \\\"88\\\"\\n  },\\n  {\\n    \\\"表头1\\\": \\\"004\\\",\\n    \\\"标题2\\\": \\\"赵六\\\",\\n    \\\"标题3\\\": \\\"人力资源部\\\",\\n    \\\"标题4\\\": \\\"2022-01-05\\\",\\n    \\\"标题5\\\": \\\"11000\\\",\\n    \\\"标题6\\\": \\\"项目F\\\",\\n    \\\"标题7\\\": \\\"人力资源管理师证书\\\",\\n    \\\"标题8\\\": \\\"92\\\"\\n  }\\n]");
        System.out.println(answer);
    }



}